package com.doit.day02

import scala.collection.mutable
import scala.io.Source

/**
 * 数据如下  :每个字母代表一个人 ,  统计任意一个人和其他人的共同好友
 * user          friends
 * A     :       B,C,D,F,E,O
 * B     :       A,C,E,K
 * C     :       F,A,D,I
 * D     :       A,E,F,L
 * E     :       B,C,D,M,L
 * F     :       A,B,C,D,E,O,M
 * G     :       A,C,D,E,F
 * H     :       A,C,D,E,O
 * I     :       A,O
 * J     :       B,O
 * K     :       A,C,D
 * L     :       D,E,F
 * M     :       E,F,G
 * O     :       A,H,I,J
 *
 *
 * 需求：求所有用户得共同好友
 * 1.读取文件，将每一行数据全部取出来
 * 2.A     :       B,C,D,F,E,O  ==>用户，朋友们    ==》（user,list(朋友们)）  ==》Map((user,List(friends)),(user,List(friends)....)
 * 3.求共同好友。  拿着每个用户得好友列表和其他用户得好友列表去取交集
 */

object SameFriend {
  def main(args: Array[String]): Unit = {

//    1.读取文件，将每一行数据全部取出来
    val line: List[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\Teach\\scalaDemo\\data\\Friends").getLines().toList
//    line.foreach(println)
    //2.A:B,C,D,F,E,O  ==>用户，朋友们    ==》（user,list(朋友们)）  ==》Map((user,List(friends)),(user,List(friends)....)
    val userAndFriends: List[(String, List[String])] = line.map(line => {
      val arr: Array[String] = line.split(":")
      val user: String = arr(0)
      //B,C,D,F,E,O
      val friends: List[String] = arr(1).split(",").toList
      (user, friends)
    })
//    userAndFriends.foreach(println)

    //就是用户和用户之间查看哪些是共同好友
    val res: mutable.HashMap[String, List[String]] = new mutable.HashMap[String, List[String]]()

    for(i<- 0 until userAndFriends.length){
      for(j <- i+1 until userAndFriends.length){
        //拿出来得是第一个用户和用户得好友列表
        val user1: (String, List[String]) = userAndFriends(i)
        //待比较得用户和用户列表
        val user2: (String, List[String]) = userAndFriends(j)

        //获取到共同好友
        val sameFriends: List[String] = user1._2.intersect(user2._2)
        val user1_0: String = user1._1
        val user2_0: String = user2._1
        val key: String = user1_0 + "和" + user2_0 + "的共同好友是："
        res.put(key,sameFriends);
      }
    }

    res.foreach(println)



  }


}
